import java.util.Arrays;

public class FindUniqueNumbers {
    public static void findUniqueNumbers(int[] nums, int[] result) {
        int xorResult = 0;
        // 第一步：整体异或，找到两个只出现一次的数字的异或结果
        for (int num : nums) {
            xorResult ^= num;
        }

        // 第二步：找到异或结果中任意一个为1的位
        int bitFlag = xorResult & -xorResult;

        int num1 = 0, num2 = 0;
        // 第三步：根据bitFlag将数组分为两组，并分别进行异或操作
        for (int num : nums) {
            if ((num & bitFlag) == 0) {
                num1 ^= num;
            } else {
                num2 ^= num;
            }
        }

        // 确保结果按非降序排列
        if (num1 < num2) {
            result[0] = num1;
            result[1] = num2;
        } else {
            result[0] = num2;
            result[1] = num1;
        }
    }

    public static void main(String[] args) {
        int[] nums = {4, 1, 4, 6};
        int[] result = new int[2];
        findUniqueNumbers(nums, result);
        System.out.println("唯一出现的数字是: " + Arrays.toString(result));  // 输出: [1, 6]

        nums = new int[]{1, 2, 10, 4, 1, 4, 3, 3};
        findUniqueNumbers(nums, result);
        System.out.println("唯一出现的数字是: " + Arrays.toString(result));  // 输出: [2, 10]
    }
}
